import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const api = axios.create({
  baseURL: '/api', // 使用代理路径
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          ElMessage.error('未授权，请重新登录')
          localStorage.removeItem('token')
          window.location.href = '/login'
          break
        case 403:
          ElMessage.error('权限不足')
          break
        case 500:
          ElMessage.error('服务器错误')
          break
        default:
          ElMessage.error(error.response.data?.message || '请求失败')
      }
    } else {
      ElMessage.error('网络错误')
    }
    return Promise.reject(error)
  }
)

// 用户相关API
export const userAPI = {
  // 登录 ok
  login: (data) => api.post('/auth/login', data),
  
  // 获取所有用户 ok
  getUserList: () => api.get('/auth/GetAllUsers'),
  
  // 创建用户 ok
  createUser: (data) => api.post('/auth/register', data),
  
  // 修改用户资料 ok
  updateUser: (data) => api.post(`/auth/UpDataUser`, data),

  // 修改用户密码 ok
  changePassword: (userId, data) => api.post(`/auth/ChangePassword/${userId}`, data),
  
  // 删除用户 *
  deleteUser: (id) => api.delete(`/api/users/${id}`),
  
  // 获取用户角色 ok
  getUserRoles: (userId) => api.get(`/auth/getUserRoles/${userId}`),
  
  // 分配角色给用户 ok
  assignRole: (data) => api.post(`/auth/AddUserToRole`, data),

  // 从用户移除角色 ok
  removeUserRole: (userId, data) => api.post(`/auth/RemoveUserRole/${userId}`, data),

  // 根据id获取用户信息
  getUserById: (userId) => api.get(`/auth/GetUser/${userId}`),
}

// 角色相关API
export const roleAPI = {
  // 获取所有角色 ok
  getRoleList: () => api.get('/auth/GetAllRoles'),

  // 获取角色成员列表
  getRoleMembers: (roleName) => api.get(`/auth/GetRoleMembers/${roleName}`),
  
  // 创建角色 ok
  createRole: (data) => api.post('/auth/CreatRole', data),
  
  // 更新角色 *
  updateRole: (id, data) => api.put(`/api/roles/${id}`, data),
  
  // 删除角色 *
  deleteRole: (id) => api.delete(`/api/roles/${id}`),
}

// 人脸识别相关API
export const faceAPI = {
  // 查询分组信息
  getGroupInfo: () => axios.get('/face-api/ks/group?alg=face'),
  
  // 新增人脸信息
  addFaceInfo: (data) => axios.post('/face-api/ks/face', data),

  // 载入人脸底库
  loadDatabase: () => axios.post('/face-api/ks/face/load'),
  
  // 获取所有分组列表
  getGroupList: () => axios.get('/face-api/face/groups'),
  
  // 获取分组内的人脸列表
  getFaceList: (params) => axios.get('/face-api/ks/face', { params }),
  
  // 删除人脸
  deleteFace: (faceIds) => {
    // 如果传入的是单个ID字符串，转换为数组
    const ids = Array.isArray(faceIds) ? faceIds : [faceIds]
    return axios.delete('/face-api/ks/face', {
      data: { ids },
      headers: {
        'Content-Type': 'application/json'
      }
    })
  },
  
  // 修改人脸信息
  updateFaceInfo: (data) => axios.put('/face-api/ks/face', data, {
    headers: {
      'Content-Type': 'application/json'
    }
  }),
  
  // 添加或修改人脸图像
  updateFaceImage: (imageData) => axios.put('/face-api/ks/face/image', imageData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

// 工服管理相关API
export const workClothesAPI = {
  // 查询工服分组信息
  getGroupInfo: () => axios.get('/face-api/ks/group?alg=work_clothes'),
  
  // 获取工服列表
  getWorkClothesList: (params) => axios.get('/face-api/ks/work_clothes', { params }),
  
  // 新增工服信息
  addWorkClothes: (data) => axios.post('/face-api/ks/work_clothes', data),
  
  // 修改工服信息
  updateWorkClothes: (data) => axios.put('/face-api/ks/work_clothes', data, {
    headers: {
      'Content-Type': 'application/json'
    }
  }),
  
  // 添加或修改工服图像
  updateWorkClothesImage: (imageData) => axios.put('/face-api/ks/work_clothes/image', imageData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  }),
  
  // 删除工服
  deleteWorkClothes: (clothesIds) => {
    // 如果传入的是单个ID字符串，转换为数组
    const ids = Array.isArray(clothesIds) ? clothesIds : [clothesIds]
    return axios.delete('/face-api/ks/work_clothes', {
      data: { ids },
      headers: {
        'Content-Type': 'application/json'
      }
    })
  },
  
  // 载入工服底库
  loadDatabase: () => axios.post('/face-api/ks/work_clothes/load')
}

export default api